package com.demo.core.service.base;

import java.util.Date;
import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.dao.base.support.SearchArgumentSupport;
import com.demo.core.model.Org;

/**
 * 机构服务接口
 * 
 * @author ryuu.kk
 *
 */
public interface OrgService extends BaseCoreService<Org, Long> {
	/**
	 * 更新区域
	 * @param id 主键ID
	 * @param areaId 区域ID
	 */
	void updateArea(Long id, Long areaId);
	/**
	 * 更新机构类型
	 * @param id 机构ID
	 * @param type 机构类型
	 */
	void updateType(Long id, String type);
	/**
	 * 更新结构名
	 * @param id 机构ID
	 * @param name 机构名
	 */
	void updateName(Long id, String name);
	/**
	 * 更新机构Code
	 * @param id 机构ID
	 * @param code 机构Code
	 */
	void updateCode(Long id, String code);
	/**
	 * 更新机构状态和有效期限日
	 * @param id 机构ID
	 * @param enabled 是否可用
	 * @param expireDay 有效期限日
	 */
	void updateEnabled(Long id, boolean enabled, Date expireDay);
	
	/**
	 * 通过主键ID查询机构模型对象
	 * @param id 主键ID
	 * @return 机构模型
	 */
	Org find(Long id);
	
	/**
	 * 查询站点ID下的所有机构
	 * @param siteId 机构ID
	 * @return 机构模型列表
	 */
	List<Org> findAll(Long siteId);
	
	/**
	 * 通过站点ID,对站点所有机构进行查询(树)
	 * @param siteId 站点ID
	 * @return Org 机构树
	 */
	Org treeRoot(Long siteId);
	
	/**
	 * 通过ID查找树形机构数据
	 * @param siteId 站点ID
	 * @param id 机构ID(树节点ID)
	 * @return Org 机构树
	 */
	Org tree(Long siteId, Long id);
	
	/**
	 * 通过ID和深度对指定站点进行机构树查找
	 * @param siteId 站点ID
	 * @param id 机构ID(树节点ID)
	 * @param depths 深度
	 * @return Org 机构模型
	 */
	Org tree(Long siteId, Long id, int... depths);
	
	/**
	 * 分页检索功能
	 * 通过站点ID对站点进行分页查找
	 * @param siteId 站点ID
	 * @param argumentSupport 分页条件对象
	 */
	ResultSearchResult<Org> search(Long siteId, SearchArgumentSupport argumentSupport);
}
